package week7.util;

public interface SortedSet<Elem> {
	
	/**
	 * Voegt een element toe aan deze lijst, als het element nog niet
	 * voorhanden was (d.w.z., de lijst bevat geen dubbelen).
	 * @param elem Toe te voegen element.
	 * @return <tt>true</tt> als <tt>elem</tt> voor aanroep nog niet
	 * in deze lijst bevat was.
	 * @ensure this.contains(elem) && result != old.contains(elem)
	 */
	public boolean add(Elem elem);
	
	/**
	 * Controleert of een element zich in deze lijst bevindt.
	 * @param elem Het gezochte element.
	 * @return <tt>true</tt> als <tt>elem</tt> zich in deze lijst bevindt.
	 */
	public boolean contains(Elem elem);
	
	/**
	 * Levert een element op een gegeven index in deze lijst.
	 * @param index De index van het gewenste element.
	 * @return Het element op positie <tt>index</tt>.
	 * @ensure result != null
	 */
	public Elem get(int index);
	
	/**
	 * Test of een element kleiner is dan een ander volgens de volgorde
	 * die in deze lijst wordt aangehouden.
	 */
	public boolean lessThan(Elem e1, Elem e2);
	
	/**
	 * Verwijdert een element uit deze lijst.
	 * @param elem Te verwijderen element.
	 * @return <tt>true</tt> als <tt>elem</tt> voor aanroep in deze lijst
	 * bevat was.
	 * @ensure !this.contains(elem) && result == old.contains(elem)
	 */
	public boolean remove(Elem elem);
	
	/**
	 * Levert het aantal elementen in deze lijst.
	 * @return Het aantal elementen in deze lijst.
	 * @ensure result >= 0
	 */
	public int size();
}
